package com.supermarket.mapper;

import com.supermarket.entity.Rider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 骑手信息Mapper接口
 */
@Mapper
public interface RiderMapper {
    /**
     * 创建骑手信息
     * @param rider 骑手信息
     * @return 影响行数
     */
    int insertRider(Rider rider);
    
    /**
     * 更新骑手信息
     * @param rider 骑手信息
     * @return 影响行数
     */
    int updateRider(Rider rider);
    
    /**
     * 根据ID查询骑手信息
     * @param id 骑手ID
     * @return 骑手信息
     */
    Rider selectRiderById(@Param("id") Integer id);
    
    /**
     * 根据用户ID查询骑手信息
     * @param userId 用户ID
     * @return 骑手信息
     */
    Rider selectRiderByUserId(@Param("userId") Integer userId);
    
    /**
     * 根据状态查询骑手列表
     * @param status 骑手状态
     * @return 骑手列表
     */
    List<Rider> selectRidersByStatus(@Param("status") String status);
    
    /**
     * 更新骑手状态
     * @param id 骑手ID
     * @param status 骑手状态
     * @return 影响行数
     */
    int updateRiderStatus(@Param("id") Integer id, @Param("status") String status);
    
    /**
     * 增加骑手配送单数
     * @param id 骑手ID
     * @return 影响行数
     */
    int incrementDeliveryCount(@Param("id") Integer id);
    
    /**
     * 更新骑手评分
     * @param id 骑手ID
     * @param rating 新评分
     * @return 影响行数
     */
    int updateRiderRating(@Param("id") Integer id, @Param("rating") BigDecimal rating);
    
    /**
     * 查询所有骑手
     * @return 骑手列表
     */
    List<Rider> selectAllRiders();
    
    /**
     * 查询评分大于等于指定值的骑手
     * @param rating 评分值
     * @return 骑手列表
     */
    List<Rider> selectRidersByRatingGreaterThan(@Param("rating") BigDecimal rating);
    
    /**
     * 分页查询骑手列表
     * @param offset 偏移量
     * @param limit 每页数量
     * @return 骑手列表
     */
    List<Rider> selectRidersWithPagination(@Param("offset") Integer offset, @Param("limit") Integer limit);
    
    /**
     * 查询骑手总数
     * @return 骑手总数
     */
    int countRiders();
    
    /**
     * 查询骑手信息（包含用户信息）
     * @param id 骑手ID
     * @return 骑手信息（包含用户信息）
     */
    Rider selectRiderWithUserById(@Param("id") Integer id);
} 